今天原本要繼續研究爬蟲,使我們的資料庫內的資料更為逼真(其實大可不必XD),殊不知全忘了資料庫的外鍵還沒建置完成,一經提醒只好立馬開工。整個晚上就這樣飛走了,走了不少冤望路...
還好後來總算把資料庫的語法稍稍微搞懂了,最剛開始是外鍵沒設,只建立了表格、自增主鍵、一些假資料。這樣是很爽沒錯,咻~~一聲組員的資料收一收,小bug修一下,就這樣建好了。還想說其實挺簡單的啊!但是加上外鍵時才是痛苦的開始...
最後,我把資料庫的建立分成三部分
這樣做能降低相依性,也能分段debug,另外請組員交資料時,也才不會全部混在一起而提高整合的難度。不過這些都是摸索最後才得到的結論啦QAQ
因為有了為外鍵,表格們就有了階層的關係。例如:會員與活動。一定要先有這個會員才能報名活動吧!可是啊...我們的表格算一算30個出頭,也是個大工程啊!
這邊我是拆開解釋,我的做法是在DROP TABLE
的部分,會依照表格階層逆向
排序。再來是DROP SEQUENCE
一區,最後是各個TABLE的建立。
DROP TABLE MEM;
DROP SEQUENCE MEM_seq;
CREATE TABLE MEM (
MEM_NO VARCHAR2(45) NOT NULL,
MEM_ACC VARCHAR2(45),
MEM_PWS VARCHAR2(20),
MEM_NAME VARCHAR2(20),
MEM_NICKNAME VARCHAR2(60),
MEM_PHONE VARCHAR2(20),
MEM_TEL VARCHAR2(20),
MEM_EMAIL VARCHAR2(200),
MEM_ADRS VARCHAR2(200),
MEM_STATUS VARCHAR2(5),
LOVE_POINTS VARCHAR2(200),
CONSTRAINT MEM_KEY PRIMARY KEY (MEM_NO));
CREATE SEQUENCE MEM_seq
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE;
外鍵的建立因為將資料的書放到最後的關係,變得比較簡單,下面的語法是在表格建立後所使用的。
-- 公益活動
ALTER TABLE ACTIVITY ADD CONSTRAINT ACT_FK1 FOREIGN KEY (FDN_NO) REFERENCES FUNDATION(FDN_NO);
ALTER TABLE ACTIVITY ADD CONSTRAINT ACT_FK2 FOREIGN KEY (ACT_SNO) REFERENCES ACTIVITY_SORT (ACT_SNO);
ALTER TABLE ACTIVITY ADD CONSTRAINT ACT_FK3 FOREIGN KEY (ADM_NO) REFERENCES ADM(ADM_NO);
輸入假資料的部分則是要依照表格階層順向
排序,這邊我是分成LEVEL1~5來分區,以降低整合的難度。
------------
-- LEVEL1 --
------------
-- ADM 管理員
INSERT INTO ADM (ADM_NO, ADM_ACC, ADM_PSW, ADM_NAME, ADM_STATUS) VALUES ('A'||LPAD(to_char(ADM_seq.NEXTVAL), 6, '0'), 'ADM1', '123456', '史瑞克', '1');
INSERT INTO ADM (ADM_NO, ADM_ACC, ADM_PSW, ADM_NAME, ADM_STATUS) VALUES ('A'||LPAD(to_char(ADM_seq.NEXTVAL), 6, '0'), 'ADM2', '123456', '史迪奇', '1');
INSERT INTO ADM (ADM_NO, ADM_ACC, ADM_PSW, ADM_NAME, ADM_STATUS) VALUES ('A'||LPAD(to_char(ADM_seq.NEXTVAL), 6, '0'), 'ADM3', '123456', '史努比', '1');
INSERT INTO ADM (ADM_NO, ADM_ACC, ADM_PSW, ADM_NAME, ADM_STATUS) VALUES ('A'||LPAD(to_char(ADM_seq.NEXTVAL), 6, '0'), 'ADM4', '123456', '史萊姆', '1');
INSERT INTO ADM (ADM_NO, ADM_ACC, ADM_PSW, ADM_NAME, ADM_STATUS) VALUES ('A'||LPAD(to_char(ADM_seq.NEXTVAL), 6, '0'), 'ADM5', '123456', '史考特', '1');
好累啊~~~兩點多惹!